package com.lindroy.androidplayer.logic.network2

import com.king.retrofit.retrofithelper.annotation.DomainName
import com.lindroy.androidplayer.constants.DOMIN_UPDATE
import com.lindroy.androidplayer.logic.model.*
import com.lindroy.androidplayer.logic.model.bean.PageDataModel
import retrofit2.http.*

/**
 * @author Lin
 * @date 2021/4/15
 * @function
 */
interface ApiService {
    //region 首页
    //轮播图
    @GET("banner/json")
    suspend fun getBanner(): HttpResult<List<BannerResp>>

    //置顶文章
    @GET("article/top/json")
    suspend fun getTopArticles(): HttpResult<List<ArticleResp>>

    //首页文章
    @GET("article/list/{page}/json")
    suspend fun getArticles(@Path("page") page: Int): HttpResult<PageDataModel<ArrayList<ArticleResp>>>
    //endregion 首页

    //region 注册登录
    /**
     * 注册
     */
    @POST("user/register")
    suspend fun register(
        @Query("username") userName: String,
        @Query("password") password: String,
        @Query("repassword") repassword: String
    ): HttpResult<LoginResp>

    @POST("user/login")
    suspend fun login(
        @Query("username") userName: String,
        @Query("password") password: String
    ): HttpResult<LoginResp>

    /**
     * 退出登录
     */
    @GET("user/logout/json")
    suspend fun logout(): HttpResult<Any?>
    //endregion 注册登录

    //region 收藏相关接口
    /**
     * 收藏文章
     */
    @POST("lg/collect/{id}/json")
    suspend fun collect(@Path("id") id: Int): HttpResult<Any?>

    /**
     * 取消收藏文章-我的收藏页面
     */
    @POST("lg/uncollect/{id}/json")
    suspend fun unCollect(
        @Path("id") id: Int,
        @Query("originId") originId: Int = -1
    ): HttpResult<Any?>

    /**
     * 取消收藏文章-文章列表
     */
    @POST("lg/uncollect_originId/{id}/json")
    suspend fun unCollectListArticle(@Path("id") id: Int): HttpResult<Any?>

    /**
     * 收藏文章列表
     */
    @GET("lg/collect/list/{id}/json")
    suspend fun getCollectedArticles(@Path("id") id: Int): HttpResult<PageDataModel<ArrayList<CollectArticleResp>>>

    /**
     * 收藏网址
     */
    @POST("lg/collect/addtool/json")
    suspend fun collectUrl(
        @Query("name") name: String,
        @Query("link") link: String
    ): HttpResult<CollectUrlResponse>

    /**
     * 取消收藏网址
     */
    @POST("lg/collect/deletetool/json")
    suspend fun deletetool(@Query("id") id: Int): HttpResult<Any?>
    //endregion 收藏相关接口

    //region 公众号
    //获取公众号列表
    @GET("wxarticle/chapters/json")
    suspend fun getWXChapter(): HttpResult<List<WXChapterResp>>

    //获取某一公众号下的文章
    @GET("wxarticle/list/{id}/{page}/json")
    suspend fun getWxArticle(@Path("id") id: Int, @Path("page") page: Int):
            HttpResult<PageDataModel<ArrayList<WXArticleResp>>>
    //endregion 公众号

    //region 项目
    //获取所有的项目种类
    @GET("project/tree/json")
    suspend fun getProjectTypes(): HttpResult<List<ProjectTypesResp>>

    //获取某一项目类型下的项目
    @GET("project/list/{page}/json")
    suspend fun getProjectList(
        @Path("page") page: Int,
        @Query("cid") cid: Int
    ): HttpResult<PageDataModel<ArrayList<ProjectItemResp>>>
    //endregion 项目

    //region 积分模块
    /**
     * 个人积分
     */
    @GET("lg/coin/userinfo/json")
    suspend fun getPersonalCoin(): HttpResult<CoinPersonalResp>

    /**
     * 积分排行榜
     */
    @GET("coin/rank/{page}/json")
    suspend fun getCoinRanking(@Path("page") page: Int): HttpResult<PageDataModel<ArrayList<CoinRankingResp>>>

    /**
     * 个人积分记录
     */
    @GET("lg/coin/list/{page}/json")
    suspend fun getCoinHistory(@Path("page") page: Int): HttpResult<PageDataModel<ArrayList<CoinHistoryResp>>>

    //endregion 积分模块

    //region 体系
    /**
     * 获取所有的体系目录
     */
    @GET("tree/json")
    suspend fun getKnowledgeTree(): HttpResult<List<KnowledgeResp>>

    /**
     * 获取某一个体系下的文章
     */
    @GET("article/list/{page}/json")
    suspend fun getKnowledgeArticles(
        @Path("page") page: Int,
        @Query("cid") cid: Int
    ): HttpResult<PageDataModel<ArrayList<ArticleResp>>>

    /**
     * 获取导航数据
     */
    @GET("navi/json")
    suspend fun getNavigationData(): HttpResult<List<KnowledgeNavResp>>

    /**
     * 获取问答列表
     */
    @GET("wenda/list/{page}/json")
    suspend fun getQuestionList(@Path("page") page: Int): HttpResult<PageDataModel<ArrayList<ArticleResp>>>
    //endregion 体系

    //region 搜索
    @GET("hotkey/json")
    suspend fun getSearchHotKeyword(): HttpResult<List<SearchHotKeyworkResp>>

    @POST("article/query/{page}/json")
    suspend fun getSearchArticles(
        @Path("page") page: Int,
        @Query("k") keyword: String
    ): HttpResult<PageDataModel<ArrayList<ArticleResp>>>
    //endregion 搜索

    @DomainName(DOMIN_UPDATE)
    @GET("update/update.json")
    suspend fun getUpdateInfo():HttpResult<UpdateResp>
}